/**
 * 入群欢迎插件 - 纯本地版
 * 作者：风云
 * 功能：新成员入群时使用本地API获取信息并发送到群里
 */

import plugin from '../../lib/plugins/plugin.js'

export class GroupWelcome extends plugin {
  constructor() {
    super({
      name: '入群欢迎详细版',
      dsc: '新成员入群时自动获取详细信息并发送欢迎消息',
      event: 'notice.group_increase',
      priority: 2000,
      namespace: 'group-welcome',
      rule: [
        {
          reg: '.*',
          fnc: 'onGroupIncrease'
        }
      ]
    })
    
    // 初始化冷却时间记录
    this.cooldowns = new Map()
    
    // 只在插件加载时打印一次
    console.log(' ')
  }
  
  // 主处理函数 - 新成员入群
  async onGroupIncrease(e) {
    try {
      const { group_id, user_id } = e
      
      // 检查冷却时间（5分钟内同一用户不重复触发）
      const cooldownKey = `${group_id}_${user_id}`
      if (this.checkCooldown(cooldownKey)) {
        return true
      }
      
      // 获取成员详细信息
      const userInfo = await this.getUserInfo(e, user_id)
      
      // 构建消息
      const msg = this.buildWelcomeMessage(userInfo, user_id)
      
      // 发送消息
      await e.group.sendMsg(msg)
      
      // 更新冷却时间
      this.updateCooldown(cooldownKey)
      
      return true
    } catch (err) {
      // 静默失败，不打印错误
      return true
    }
  }
  
  // 检查冷却时间
  checkCooldown(key) {
    const now = Date.now()
    const lastTime = this.cooldowns.get(key)
    if (lastTime) {
      const elapsed = now - lastTime
      // 5分钟冷却时间
      return elapsed < 0
    }
    return false
  }
  
  // 更新冷却时间
  updateCooldown(key) {
    this.cooldowns.set(key, Date.now())
  }
  
  // 获取用户信息
  async getUserInfo(e, user_id) {
    try {
      // 尝试使用机器人API获取陌生人信息
      const strangerInfo = await e.bot.getStrangerInfo(user_id)
      
      // 获取头像
      let avatarData = null
      try {
        const avatarUrl = `https://q.qlogo.cn/g?b=qq&nk=${user_id}&s=640`
        const avatarBuffer = await BotUtil.Buffer(avatarUrl, { timeout: 5000 })
        if (avatarBuffer && avatarBuffer.length > 0) {
          avatarData = `base64://${avatarBuffer.toString('base64')}`
        }
      } catch (avatarErr) {
        // 头像获取失败，使用URL
        avatarData = `https://q.qlogo.cn/g?b=qq&nk=${user_id}&s=640`
      }
      
      // 解析性别
      let gender = '未知'
      if (strangerInfo.sex === 'male' || strangerInfo.sex === '男') {
        gender = '男'
      } else if (strangerInfo.sex === 'female' || strangerInfo.sex === '女') {
        gender = '女'
      }
      
      // 解析等级
      let level = '未知'
      if (strangerInfo.level) {
        level = `${strangerInfo.level}级`
      }
      
      // 判断是否是会员（根据等级简单判断）
      let isVip = false
      if (strangerInfo.level && parseInt(strangerInfo.level) > 64) {
        isVip = true
      }
      
      return {
        qq: user_id,
        nickname: strangerInfo.nickname || `用户${user_id}`,
        avatar: avatarData,
        gender: gender,
        level: level,
        is_vip: isVip,
        age: strangerInfo.age || 0
      }
    } catch (err) {
      // 如果获取信息失败，返回基本默认信息
      return {
        qq: user_id,
        nickname: `用户${user_id}`,
        avatar: `https://q.qlogo.cn/g?b=qq&nk=${user_id}&s=640`,
        gender: '未知',
        level: '未知',
        is_vip: false,
        age: 0
      }
    }
  }
  
  // 构建欢迎消息
  buildWelcomeMessage(userInfo, user_id) {
    const msg = []
    
    // 标题
    msg.push('🎉 新成员加入')
    msg.push('\n━━━━━━━━━━━━━━━━━━')
    
    // 用户头像
    msg.push('\n')
    msg.push({
      type: 'image',
      data: {
        file: userInfo.avatar
      }
    })
    
    // 用户信息
    msg.push('\n👤 昵称：', userInfo.nickname)
    msg.push('\n🆔 QQ：', userInfo.qq)
    msg.push('\n⚧ 性别：', userInfo.gender)
    msg.push('\n⭐ 等级：', userInfo.level)
    
    // 会员状态
    msg.push('\n💎 会员：', userInfo.is_vip ? '是' : '否')
    
    // 分隔线和时间
    msg.push('\n━━━━━━━━━━━━━━━━━━')
    msg.push('\n⏱️ 时间：', new Date().toLocaleString('zh-CN'))
    
    return msg
  }
}

// 导出插件实例
export const groupWelcome = new GroupWelcome()